/**
 * 格式化货币
 * @param {number} value - 要格式化的值
 * @param {string} symbol - 货币符号
 * @param {number} decimals - 小数位数
 * @returns {string} - 格式化后的货币字符串
 */
export function formatCurrency(value, symbol = '¥', decimals = 2) {
  if (value === undefined || value === null) {
    return `${symbol}0.00`;
  }
  
  const amount = parseFloat(value);
  if (isNaN(amount)) {
    return `${symbol}0.00`;
  }
  
  return `${symbol}${amount.toFixed(decimals).replace(/\d(?=(\d{3})+\.)/g, '$&,')}`;
}

/**
 * 格式化数字
 * @param {number} value - 要格式化的值
 * @param {number} decimals - 小数位数
 * @returns {string} - 格式化后的数字字符串
 */
export function formatNumber(value, decimals = 0) {
  if (value === undefined || value === null) {
    return '0';
  }
  
  const num = parseFloat(value);
  if (isNaN(num)) {
    return '0';
  }
  
  return num.toFixed(decimals).replace(/\d(?=(\d{3})+\.)/g, '$&,').replace(/\.0+$/, '');
}

/**
 * 格式化日期
 * @param {string|Date} date - 要格式化的日期
 * @param {string} format - 格式化模式
 * @returns {string} - 格式化后的日期字符串
 */
export function formatDate(date, format = 'YYYY-MM-DD') {
  if (!date) {
    return '';
  }
  
  const d = typeof date === 'string' ? new Date(date) : date;
  
  if (!(d instanceof Date) || isNaN(d)) {
    return '';
  }
  
  const year = d.getFullYear();
  const month = String(d.getMonth() + 1).padStart(2, '0');
  const day = String(d.getDate()).padStart(2, '0');
  const hours = String(d.getHours()).padStart(2, '0');
  const minutes = String(d.getMinutes()).padStart(2, '0');
  const seconds = String(d.getSeconds()).padStart(2, '0');
  
  return format
    .replace('YYYY', year)
    .replace('MM', month)
    .replace('DD', day)
    .replace('HH', hours)
    .replace('mm', minutes)
    .replace('ss', seconds);
}

/**
 * 格式化百分比
 * @param {number} value - 要格式化的值
 * @param {number} decimals - 小数位数
 * @returns {string} - 格式化后的百分比字符串
 */
export function formatPercent(value, decimals = 2) {
  if (value === undefined || value === null) {
    return '0%';
  }
  
  const percent = parseFloat(value);
  if (isNaN(percent)) {
    return '0%';
  }
  
  return `${percent.toFixed(decimals)}%`;
}

/**
 * 格式化千位数
 * @param {Number} value - 要格式化的数值
 * @returns {String} 带有k、M、B等单位的简化数字
 */
export function formatThousands(value) {
  if (value === null || value === undefined) return '';
  
  const num = parseFloat(value);
  if (isNaN(num)) return '';
  
  if (num >= 1000000000) {
    return (num / 1000000000).toFixed(1) + 'B';
  }
  
  if (num >= 1000000) {
    return (num / 1000000).toFixed(1) + 'M';
  }
  
  if (num >= 1000) {
    return (num / 1000).toFixed(1) + 'k';
  }
  
  return num.toString();
}

/**
 * 格式化增长率
 * @param {number} value - 增长率值
 * @param {boolean} isInverse - 是否反向增长（成本等，增长是负面的）
 * @returns {object} - 返回格式化后的字符串和样式类型
 */
export function formatGrowth(value, isInverse = false) {
  if (value === undefined || value === null) {
    return { text: '0%', type: 'info' };
  }
  
  const growth = parseFloat(value);
  if (isNaN(growth)) {
    return { text: '0%', type: 'info' };
  }
  
  const text = `${growth >= 0 ? '+' : ''}${growth.toFixed(2)}%`;
  
  let type = 'info';
  if (growth === 0) {
    type = 'info';
  } else if (isInverse) {
    type = growth < 0 ? 'success' : 'danger';
  } else {
    type = growth >= 0 ? 'success' : 'danger';
  }
  
  return { text, type };
}

export default {
  formatCurrency,
  formatNumber,
  formatDate,
  formatPercent,
  formatThousands,
  formatGrowth
}; 